In [48]:
%load_ext autoreload
%autoreload 2
The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload
In [ ]:
import pandas as pd
import os
import numpy as np
from pyTsetlinMachine.tm import MultiClassTsetlinMachine
from time import time
from PIL import Image
from sklearn.model_selection import train_test_split
In [50]:
from tzetlin import (filename_to_bin_img_array, get_img_array, filter_uneven_shapes,
                     load_lesion_df, get_all_imgs_filenames_from_dir_list, filter_non_lesion_entries, 
                     get_lesion_filenames_list,
                     split_lesions_present_absent,
                     find_duplicates)

Dataset¶

In [51]:
PRUNED_DATASET_DIR = "data/Dataset-pruned"
PRUNED_IMGS_DIR = PRUNED_DATASET_DIR + "/base_images"
In [75]:
df = load_lesion_df()
print("Original df shape:", df.shape)

lesions_present_df, lesions_absent_df = split_lesions_present_absent(df)

lesion_filenames = get_lesion_filenames_list(df)
print("Num. of lesion files:", len(lesion_filenames))

lesions_present_df_filenames = get_lesion_filenames_list(lesions_present_df)
print("Num. of lesion files with lesion present (entry present in the csv):", 
      len(lesions_present_df_filenames))

lesions_absent_df_filenames = get_lesion_filenames_list(lesions_absent_df)
print("Num. of lesion files with lesion absent (entry absent in the csv):", 
      len(lesions_absent_df_filenames))

all_filenames = get_all_imgs_filenames_from_dir_list(PRUNED_IMGS_DIR)
print("Num. of all image files:", len(all_filenames))
Original df shape: (1149, 31)
Num. of lesion files: 1149
Num. of lesion files with lesion present (entry present in the csv): 620
Num. of lesion files with lesion absent (entry absent in the csv): 529
Num. of all image files: 931
In [76]:
dir_lesions_present = []
dir_lesions_absent = []
other = []

for f in all_filenames:
    if f in lesions_present_df_filenames:
        dir_lesions_present.append(f)
    elif f in lesions_absent_df_filenames:
        dir_lesions_absent.append(f)
    else:
        other.append(f)

print("Images present in the image folder, absent in the csv:", len(other))
dir_lesions_absent += other
Images present in the image folder, absent in the csv: 57
In [78]:
all_imgs = dir_lesions_present + dir_lesions_absent
len(all_imgs)

Y_train = [1]*len(dir_lesions_present) + [0]*len(dir_lesions_absent)

assert len(all_imgs) == len(Y_train)
In [80]:
# Separate image IDs and frame numbers
imgs_frames = []

for f in all_imgs:
    base = f.replace('.png','')
    img_id, frame = base.split('_')
    imgs_frames.append((img_id, frame))
len(imgs_frames)
Out[80]:
931
In [81]:
img_size = (256, 256)
lesion_masks = []


for img_id, frame in imgs_frames:
    frame = int(frame)
    row = df[(df['image_id'] == img_id) & (df['frame'] == frame)]

    if row.empty:
        print(f"WARNING: No entry in df for {img_id}, frame {frame}")
        lesion_masks.append(np.zeros(img_size, dtype=np.uint8))
        continue
    elif pd.isna(row.iloc[0]['lesion_id']):
        print(f"WARNING: No lesion for {img_id}, frame {frame}")
        lesion_masks.append(np.zeros(img_size, dtype=np.uint8))
        continue

    lesion_x = int(row.iloc[0]['lesion_x'])
    lesion_y = int(row.iloc[0]['lesion_y'])
    lesion_width = int(row.iloc[0]['lesion_width'])
    lesion_height = int(row.iloc[0]['lesion_height'])

    lesion_mask = np.zeros(img_size, dtype=np.uint8)
    lesion_mask[lesion_y:lesion_y+lesion_height, lesion_x:lesion_x+lesion_width] = 1

    lesion_masks.append(lesion_mask)

lesion_masks = np.array(lesion_masks)
len(lesion_masks)
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5yshtbwpz22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlbfw4nnotz22, frame 43
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mldx9653nxv22, frame 45
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymr4i, frame 13
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pm7g60u22, frame 48
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbhcpprubf22, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg8hvxr9qia22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp498txzzhkoum022, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8sfw4ib22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyuzi3sqhl722, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemi2tt9w022, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jqfql5v22, frame 45
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqz1, frame 16
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mh7wxkodv0522, frame 18
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqyb, frame 20
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympsn, frame 13
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxugicd59td22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn36pu6ixl022, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0r0nq6pn22, frame 23
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqpx, frame 15
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunm3zopt122, frame 47
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunly5k13i22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jwoajvsvw6722, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8lu0x093r22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstof8iams322, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftaafvcid22, frame 32
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqyl, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pscinfi22, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mgcf94tilmx22, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp498wvamuwb6pq22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2plx3rdw22, frame 24
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjf02qnmxg322, frame 45
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pqyfwic22, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85r9wupiz22, frame 45
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0yms9t, frame 16
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0v3gmqv522, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxugi6lddkk22, frame 23
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympsn, frame 9
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlbfxd5hfoe22, frame 44
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstof7d61up22, frame 42
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5oup62e22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunm5i678h22, frame 39
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwad3c0hk22, frame 45
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwad3c0hk22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8zch7sk5v22, frame 66
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn3wvhzxdm722, frame 28
WARNING: No lesion for 13c2ur5452xb62wphb95qjhuf4zvtavy, frame 13
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxtehkqvd1322, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4tyevfwq22, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8nyxra322, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxdyfl2s22, frame 24
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxgjix8e22, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jh9qgql22, frame 57
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mhdb2j3l3v922, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzo1ixaz40322, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mir1i2k22, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcyxhzkgtm22, frame 56
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mif6sem5a5q22, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4tx05lyu22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzo1ixaz40322, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemicfx5gd22, frame 39
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mkf4w4v61w822, frame 40
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0v3tgkmz22, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlbqwqy6eyr22, frame 45
WARNING: No lesion for 13c2ur5452xb62wphbkf05kp5ghevfbi, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mp9mycl22, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunm3zopt122, frame 43
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftacenleb22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mh7wxj2igom22, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mifk24t0sju22, frame 56
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxtehkidxnp22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh5182f0x22, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbhcpx93zp22, frame 26
WARNING: No lesion for 13c2ur549vohc0jat2dvu3xs2y1, frame 24
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympt5, frame 15
WARNING: No lesion for 13c2ur549vohc0jat2wd23mle1, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85r52ygov22, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg8hvypp6vo22, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mgcf93bdtro22, frame 23
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymrta, frame 12
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmbjw5xonlu22, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxos8elm1i422, frame 46
WARNING: No lesion for 131aedfht3wfgufvmycqza9v0ua859y, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxugi5ifhz522, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4tyvevv822, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwx9z9i0122, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5nw81ic22, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5djppw522, frame 41
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp1cp, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemi7dcg5y22, frame 36
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcyy2a2clg22, frame 44
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pqyfwic22, frame 23
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqqc, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftab118r422, frame 43
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp1ae, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcyy2a2clg22, frame 46
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqp5, frame 17
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg8hvyy093222, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg8hvyy093222, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4u1zkeyg22, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftamgqtxl22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85rd0fgxd22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0qp0rrvk22, frame 43
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxa84nyz22, frame 40
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympt5, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzo1j13hed322, frame 45
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp1ar, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mma5mcchbpq22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5fl4qte22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn4mfl8nw8t22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbhcpprubf22, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunlwh5jgi22, frame 36
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jsyaftal60122, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mh7xylqex4u22, frame 36
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymrsc, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pm7g60u22, frame 53
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzq6gxwoxtj22, frame 34
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozmh, frame 15
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8lu0x093r22, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmbjw684qyk22, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85rd8likr22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh510g5kf22, frame 50
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ml753rly5oi22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbu372vfte22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwabpeyta22, frame 52
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzll72bstib22, frame 21
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymr4e, frame 12
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh510g5kf22, frame 53
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jsf0kxr22, frame 38
WARNING: No lesion for 13c2ur549vohc0jat2ewk4eyu41, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jwozv2hftsy22, frame 17
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mm91xnvc1ew22, frame 36
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxugibikgyd22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jfpnd8i22, frame 51
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85r6e9f0r22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn4mfg8bkgy22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstof7d61up22, frame 44
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemi7dcg5y22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcyxgv5o4w22, frame 60
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwadsc7wa22, frame 42
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlkzt1ah0u22, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp498txzzigu9a222, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mm91xnvc1ew22, frame 44
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlbqwr3hn8622, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjf02qnmxg322, frame 44
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0yms9q, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mma5mcchbpq22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxgjix8e22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mffrymilfct22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp496aiqkfrl56u22, frame 17
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn3wvh2dr2t22, frame 46
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0yms98, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0v3gmqv522, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85r5ebddd22, frame 40
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymrrz, frame 16
WARNING: No lesion for 13c2ur5452xb62wphbkf05kp5ghevfbs, frame 38
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzo1ivy9xsv22, frame 34
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp35u, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftaiyqmom22, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemi1a2kdg22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mma5masf8h622, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4u1zkeyg22, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbhclnkxsy22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5l3gmfzrq22, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlbfw3zb94s22, frame 40
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg8hvxr9qia22, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jsf0kxr22, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jvp6iigk1jz22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8zcnu19qs22, frame 52
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5cbcxbn22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn36pt88u4222, frame 39
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzmz3gh22k922, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mkf4w4v61w822, frame 43
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8ltu8asax22, frame 47
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwajp7b1s22, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmbjw684qyk22, frame 38
WARNING: No lesion for 13c2ur5452xb62wphb95qjhuf4zvtawg, frame 18
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozqy, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4tx05lyu22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg8hvsxehxq22, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0uwu6c9z22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jvp6ioxox2z22, frame 20
WARNING: No lesion for 13c2ur549vohc0jat2wd23mh11, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbu35x8sfc22, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mifk24t0sju22, frame 46
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mh7xylqex4u22, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmbjw5xonlu22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstofgo1r9j22, frame 30
WARNING: No lesion for 13c2ur5452xb62wphb95qjhuf4zvtawj, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlkzxsx0i622, frame 23
WARNING: No lesion for 13c2ur5452xb62wphbkf05kp5ghevfc0, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjf02rqxjdh22, frame 46
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mia86yesh2i22, frame 39
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh5182f0x22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5nw81ic22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8ltureo6z22, frame 40
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jqfql5v22, frame 47
WARNING: No lesion for 131aedfhs6pnf1fvtvp498txzz7lihjn22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8mfifhj22, frame 35
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymput, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbu372vfte22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mgcf8tja9jk22, frame 26
WARNING: No lesion for 13c2ur549vohc0jat2ewk4eyq81, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mm91xpwfnuf22, frame 47
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunjzs396d22, frame 39
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mkpndsm22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mm91xpavpff22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemi2tt9w022, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8zcfyonih22, frame 70
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstofh3o1jt22, frame 45
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jwozv8pzxl522, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8ni59pd22, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ml751ln830822, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlbqwy0o6a022, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzq6ghl7gmp22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzo1ixna6md22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn4mfg8bkgy22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp498txzz8nvxst22, frame 39
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4u385l8422, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8sfw4ib22, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mpjal0f22, frame 24
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwaiqn5p222, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mffta9cl2xf22, frame 42
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4twiypve22, frame 41
WARNING: No lesion for 13c2ur549vohc0jat2dvu3xrxb1, frame 27
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozmk, frame 16
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ml751ln830822, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfffzhepxmw22, frame 44
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwaa9o9po22, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85r6e9f0r22, frame 24
WARNING: No lesion for 131aedfhs6pnf1fvtvp498wvamq38ov722, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstof8iams322, frame 36
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xd50agyi22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mifkfi963mz22, frame 48
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8u6byky22, frame 43
WARNING: No lesion for 131aedfhs6pnf1fvtvp49joxclh8ywl822, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xdeso0r722, frame 62
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympue, frame 16
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8ltureo6z22, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jfpnd8i22, frame 41
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympsr, frame 12
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympux, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxaqosfz22, frame 31
WARNING: No lesion for 13c2ur549vohc0jat2ewk4eyyh1, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xd50agyi22, frame 29
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozrg, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzq6gw72kpe22, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzmz3h7d5gz22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn36pt88u4222, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj7wco3t3lb22, frame 40
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0qq7hmj722, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8lyvn5p22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemhzjwfu922, frame 39
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstofa1lya722, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftaiyqmom22, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyuzi2y2nxl22, frame 31
WARNING: No lesion for 13c2ur5452xb62wphbf4x120pzcs2gsx, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8ni59pd22, frame 38
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbu3dgtr4822, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mif6sfpum6h22, frame 41
WARNING: No lesion for 13c2ur5452xb62wphb95qjhuf4zvtaxa, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xdeso0r722, frame 57
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8zch7sk5v22, frame 59
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xd63iqs422, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn4mfhjftac22, frame 39
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0yms9b, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunly5k13i22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcakgxr8i422, frame 64
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxos8ewokq622, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ee0ulyq7shj22, frame 40
WARNING: No lesion for 13c2ur549vohc0jat2dvu3xs0c1, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh4xk0k4l22, frame 24
WARNING: No lesion for 13c2ur5452xb62wphbkf05kp5ghevgpg, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mi8hmk4m5rt22, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85rd8likr22, frame 32
WARNING: No lesion for 13c2ur549vohc0jat2ewj4eynm1, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4tyevfwq22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jto5dqkensc22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzmz3id86k722, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jvrnoxyphgh22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mm91xuuuo8z22, frame 65
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunlvc0am022, frame 36
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunm5i678h22, frame 50
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5fl4qte22, frame 36
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mifk27kmvbi22, frame 74
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozrz, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0qp0rrvk22, frame 40
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympv4, frame 12
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwaiqn5p222, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mh7xyjrayy322, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mj1hxrr22, frame 31
WARNING: No lesion for 13c2ur5452xb62wphbkf05kp5ghevgor, frame 17
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcakqp1db822, frame 59
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh4xk0k4l22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh4utq1jr22, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzq6gxjgdyd22, frame 34
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozs5, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzo1j0mu9ot22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5ysh92uks22, frame 44
WARNING: No lesion for 13c2ur549vohc0jat2dvu3xs9w1, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85r7273uv22, frame 27
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqyp, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj7wcnu8hq522, frame 40
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxa84nyz22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pvjze6k22, frame 39
WARNING: No lesion for 13c2ur549vohc0jat2ewj4eyk51, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcyy417nbz22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcakgxr8i422, frame 62
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mma5masf8h622, frame 24
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlkzu19ixt22, frame 38
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymrte, frame 5
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xdef7rvs22, frame 46
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0v4y3q9222, frame 44
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mkf4w48gx8522, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn36pu6ixl022, frame 38
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pw4q7zi22, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mifk27kmvbi22, frame 72
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85rd0fgxd22, frame 29
WARNING: No lesion for 131aedfht3wfgufvmycqzlkz0rcviu2, frame 19
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymtrw, frame 17
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mifkfjxwbcf22, frame 48
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymr4u, frame 14
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqpt, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mifkfjxwbcf22, frame 42
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunjzs396d22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8u6byky22, frame 54
WARNING: No lesion for 13c2ur5452xb62wphb95qjhuf4zvtavy, frame 16
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5l3drsevd22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0uxcn4dl22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwadsc7wa22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftacenleb22, frame 40
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0qnjagwy22, frame 23
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqz4, frame 17
WARNING: No lesion for 131aedfhs6pnf1fvtvp49eatmx0ax1um22, frame 22
WARNING: No lesion for 13c2ur549vohc0jat2dvt3xrqt1, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xd7zgtfe22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn4mfqd3ksy22, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mffryo1zqvt22, frame 46
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxaqosfz22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxos8ewokq622, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyuzi2y2nxl22, frame 24
WARNING: No lesion for 13c2ur549vohc0jat2wqi9spx2, frame 19
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn4mfqd3ksy22, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyuzi97x0uh22, frame 33
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozle, frame 16
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ee0ulxyp5od22, frame 37
WARNING: No lesion for 13c2ur549vohc0jat2wd23mj71, frame 18
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymr4x, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8mfifhj22, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj7wcnu8hq522, frame 29
WARNING: No lesion for 131aedfht3wfgufvmycqza9v0ua859y, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcakfghmju22, frame 77
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jvp6idx06l122, frame 22
WARNING: No lesion for 13c2ur5452xb62wphb95qjhuf4zvtax7, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzo1j0mu9ot22, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn4mfl8nw8t22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0uwu6c9z22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4tyvevv822, frame 42
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzq6ghl7gmp22, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg8hvypp6vo22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8ltt2msat22, frame 52
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn4mfrgd6gt22, frame 28
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp36b, frame 27
WARNING: No lesion for 131aedfht3wfgufvmycqza9v2mkttpy, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstofh3o1jt22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jstofgo1r9j22, frame 29
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp35c, frame 38
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mld7mqexnz322, frame 36
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp36e, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ml751m1ft2q22, frame 59
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcyxhzkgtm22, frame 57
WARNING: No lesion for 13c2ur549vohc0jat2dvt3xrmw2, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mp9mycl22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mir1i2k22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxai4omd22, frame 27
WARNING: No lesion for 13c2ur549vohc0jat2wqi9szw1, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jdq50j822, frame 65
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemicfx5gd22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mj1hxrr22, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8ltu8asax22, frame 46
WARNING: No lesion for 13c2ur549vohc0jat2ewj4eycc2, frame 48
WARNING: No lesion for 131aedfhs6pnf1fvtvp498txzzigu9a222, frame 47
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0v4y3q9222, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8ltt2msat22, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp498txzz8nvxst22, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbhcpx93zp22, frame 34
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympth, frame 16
WARNING: No lesion for 131aedfht3wfgufvmycqza9v2mkttpy, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8zcnu19qs22, frame 58
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcakfghmju22, frame 67
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwx91itlr22, frame 38
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8nyxra322, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mkf6a6b22, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzq6ggz3f7z22, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcyxgv5o4w22, frame 57
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwaa9o9po22, frame 48
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxugibxcypj22, frame 24
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemi1a2kdg22, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj8zcfyonih22, frame 53
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzmz3gh22k922, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp498wvamtxxej022, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzq6gxjgdyd22, frame 44
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mhdb2k0lbbz22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ml751k6d75922, frame 39
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxos8elm1i422, frame 33
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozrw, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcyybnlub422, frame 40
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xdef7rvs22, frame 37
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbu3cbit0u22, frame 30
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymqpk, frame 13
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5l3drsevd22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mg85r9mnbg122, frame 38
WARNING: No lesion for 131aedfhs6pnf1fvtvp49joxclh8ywl822, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftamgqtxl22, frame 31
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp19c, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlbqwraet4w22, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mm91xpavpff22, frame 38
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcake31aq822, frame 48
WARNING: No lesion for 13c2ur549vohc0jat2wd23m5b2, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mj6h8lyvn5p22, frame 36
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pt62abt22, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzq6gw72kpe22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh4rk3a5m22, frame 36
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jvrnowrejjj22, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwx91itlr22, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyrt5zq707n22, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mn3wvhzxdm722, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzp4twiypve22, frame 49
WARNING: No lesion for 131aedfht3wfgufvmycqzlkz1chix90, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jvrnoweeclp22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5djppw522, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbu37nra6d22, frame 29
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprp354, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49joxclh2wk8y22, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzlwxfggo8922, frame 29
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympty, frame 17
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzll741nkbo22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyun5cbcxbn22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pt62abt22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mh7wxl19pb322, frame 18
WARNING: No lesion for 13c2ur549vohc0jat2dvu3xs7q1, frame 18
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mpjal0f22, frame 38
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0yms9w, frame 16
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyuzi97x0uh22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49juwu7naydgi22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0uvgw21o22, frame 27
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjbu35x8sfc22, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jvp6idi20cr22, frame 26
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ympth, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mffrym7xykj22, frame 28
WARNING: No lesion for 13c2ur5452xb62wphb959tewknprozlm, frame 9
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxuh4vuvar522, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mffta9cl2xf22, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlemhzjwfu922, frame 32
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0yms8x, frame 29
WARNING: No lesion for 13c2ur5452xb62wphbkenx73hk0ymtrr, frame 14
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxvwajp7b1s22, frame 25
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mfftaafvcid22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzmz3i3w9yt22, frame 21
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mlbfxd5hfoe22, frame 41
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mja0qq7hmj722, frame 28
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ml751jvo26b22, frame 42
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzm9mkpndsm22, frame 24
WARNING: No lesion for 13c2ur549vohc0jat2dvu3xsdd1, frame 26
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ml753rly5oi22, frame 35
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxugi6lddkk22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyrt5zfj7up22, frame 19
WARNING: No lesion for 13c2ur5452xb62wphbkf05kp5ghevfax, frame 23
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jvrnoxyphgh22, frame 22
WARNING: No lesion for 131aedfhs6pnf1fvtvp49ml753rwly1i22, frame 33
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mifkdbq7bxu22, frame 65
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mk5xd7zgtfe22, frame 31
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jwoajutzp6d22, frame 26
WARNING: No lesion for 13c2ur549vohc0jat2wqi9syl1, frame 11
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzll7563ouo22, frame 20
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jzo1j13hed322, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mff2pw4q7zi22, frame 30
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jyunlvc0am022, frame 34
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mmcakhn9j5a22, frame 65
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mldx978xclh22, frame 51
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mi8hmlp9c9p22, frame 29
WARNING: No lesion for 131aedfhs6pnf1fvtvp49jxugi5ifhz522, frame 32
WARNING: No lesion for 131aedfhs6pnf1fvtvp49mjg1jdq50j822, frame 52
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493b3tui4y3s122, frame 31
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft217, frame 51
WARNING: No entry in df for 13c2ur549vohc0jat2dvu3xs9w1, frame 28
WARNING: No entry in df for 131aedfhs6pnf1fvtvp49mia86yesh2i22, frame 32
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493b3tudjsae022, frame 68
WARNING: No entry in df for 131aedfhs6pnf1fvtvp49mff2plx3rdw22, frame 21
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf1r8z1fj02, frame 43
WARNING: No entry in df for 13c2ur549vohc0jat2dvu3xrxb1, frame 29
WARNING: No entry in df for 13c2ur549vohc0jat2dvu3xs2y1, frame 29
WARNING: No entry in df for 13c2ur549vohc0jat2ewj4eygo1, frame 34
WARNING: No entry in df for 13c2ur549vohc0jat2dvt3xrmw2, frame 19
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493iu1n6d1qnz22, frame 37
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft215, frame 61
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft219, frame 51
WARNING: No entry in df for 131aedfhs6pnf1fvtvp49jyrt5v1jbyh22, frame 16
WARNING: No entry in df for 131aedfhs6pnf1fvtvp49mldx978xclh22, frame 53
WARNING: No entry in df for 131aedfhs6pnf1fvtvp49mfffzgvygi422, frame 39
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft214, frame 32
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493iu1neqswr222, frame 21
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf1r8z1fj04, frame 25
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf1r8z1fj01, frame 55
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493iu1nekk6h022, frame 19
WARNING: No entry in df for 13c2ur549vohc0jat2dfn3qff62, frame 25
WARNING: No entry in df for 13c2ur549vohc0jat2e6y42x3z1, frame 33
WARNING: No entry in df for 131aedfhs6pnf1fvtvp49mk5xd63iqs422, frame 41
WARNING: No entry in df for 131aedfhs6pnf1fvtvp49mg85r5ebddd22, frame 30
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493iu1n706yt522, frame 44
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft313, frame 34
WARNING: No entry in df for 13c2ur549vohc0jat2dvu3xrxb1, frame 26
WARNING: No entry in df for 13c2ur549vohc0jat2wd33mt71, frame 21
WARNING: No entry in df for 131aedfhs6pnf1fvtvp498wvamk5zfoj22, frame 35
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf1r8z1fj0, frame 52
WARNING: No entry in df for 13c2ur549vohc0jat2dvu3xs4p1, frame 24
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft220, frame 27
WARNING: No entry in df for 13c2ur549vohc0jat2dvt3xrmw2, frame 23
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493b3tufm4gzi22, frame 35
WARNING: No entry in df for 13c2ur549vohc0jat2dvt3xrqt1, frame 35
WARNING: No entry in df for 13c2ur549vohc0jat2dvt3xrmw2, frame 33
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft37, frame 40
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft38, frame 60
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493iu1na8zz7s22, frame 26
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft312, frame 33
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf1r8z1fj06, frame 56
WARNING: No entry in df for 13c2ur549vohc0jat2e6x42x0y1, frame 22
WARNING: No entry in df for 13c2ur549vohc0jat2dfn3qff62, frame 26
WARNING: No entry in df for 131aedfhs6pnf1fvtvp49mk5l3gmfzrq22, frame 22
WARNING: No entry in df for 13c2ur549vohc0jat2wd23mh11, frame 21
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf1r8z1fj05, frame 43
WARNING: No entry in df for 13c2ur549vohc0jat2wd23mle1, frame 21
WARNING: No entry in df for 13c2ur549vohc0jat2dvt3xrqt1, frame 33
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf3rzr1ft39, frame 60
WARNING: No entry in df for 131aedfhs6pnf1fvtvp493b3tuvd4nqc22, frame 35
WARNING: No entry in df for 13c2ur549vohc0jat2ewk4eyyh1, frame 29
WARNING: No entry in df for 13c2ur549vohc0jat2dvu3xs0c1, frame 23
WARNING: No entry in df for 12aw4ack71831bocuf5j3pz235kn1v361de, frame 33
WARNING: No entry in df for 12nc2fo32bddqwoyhtlmwecxrf1r8z1fj01, frame 39
WARNING: No entry in df for 13c2ur549vohc0jat2dvu3xs2y1, frame 30
Out[81]:
931
In [82]:
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image


DEFAULT_IMG_SIZE = (512, 512)

n_show = 10

for i, (img_id, frame) in enumerate(imgs_frames[:n_show]):
    img_path = os.path.join(PRUNED_IMGS_DIR, f"{img_id}_{frame}.png")
    img = Image.open(img_path).convert("L")  # grayscale
    img = img.resize(DEFAULT_IMG_SIZE, Image.NEAREST)
    img_arr = np.array(img)

    mask = lesion_masks[i]

    plt.figure(figsize=(6,6))
    plt.imshow(img_arr, cmap='gray')
    
    plt.imshow(mask, cmap='Reds', alpha=0.4)
    
    plt.title(f"Image: {img_id}, Frame: {frame}")
    plt.axis("off")
    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
In [83]:
all_imgs = [PRUNED_IMGS_DIR + "/" + img for img in all_imgs]

imgs_size = (256, 256)

img_array = get_img_array(all_imgs, size=imgs_size)
imgs_filtered = filter_uneven_shapes(img_array, img_size_standard=imgs_size)
In [84]:
X = imgs_filtered
y = Y_train
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)

# Convert to types accepted by pyTsetlinMachine (0/1 uint8)
X_train = X_train.astype(np.uint8)
X_test  = X_test.astype(np.uint8)

Lesion presence/absence prediction - MultiClassTsetlinMachine¶

In [ ]:
from pyTsetlinMachine.tm import MultiClassTsetlinMachine

tm = MultiClassTsetlinMachine(
    number_of_clauses=200,
    T=50,
    s=5.0,
    weighted_clauses=True
)

epochs = 200

t0 = time()
tm.fit(X_train, y_train, epochs=epochs)
t1 = time()
print(f"Training done in {t1-t0:.1f}s")

y_pred = tm.predict(X_test)
acc = np.mean(y_pred == y_test)
print(f"Test accuracy: {acc*100:.2f}%")
In [ ]:
 

MultiClassConvolutionalTsetlinMachine2D¶

Patches¶

In [ ]:
import numpy as np
from sklearn.feature_extraction.image import extract_patches_2d, reconstruct_from_patches_2d

patch_size = (8, 8)
max_patches_per_image = 100

X_patches_list = []
y_labels_list = []

images = imgs_filtered
masks = lesion_masks

for img, mask in zip(images, masks):
    # Extract random patches from this image (if more patches than max_pathes)
    X_patches = extract_patches_2d(img, patch_size) #, max_patches=max_patches_per_image)
    Y_patches = extract_patches_2d(mask, patch_size) #, max_patches=max_patches_per_image)

    # Label each patch: 1 if majority pixels are lesion
    y_labels = (Y_patches.mean(axis=(1,2)) > 0.5).astype(int)
    
    X_patches_list.append(X_patches)
    y_labels_list.append(y_labels)
In [209]:
# Combine all patches from all images
X_all = np.concatenate(X_patches_list, axis=0)
y_all = np.concatenate(y_labels_list, axis=0)
In [ ]:
import numpy as np
from sklearn.feature_extraction.image import extract_patches_2d, reconstruct_from_patches_2d


X_train_imgs, X_test_imgs, y_train_masks, y_test_masks = train_test_split(
    imgs_filtered, lesion_masks, test_size=0.2, random_state=42
)

patch_size = (8, 8)
max_patches_per_image = 50  # to control memory

X_train_patches_list = []
y_train_patches_list = []

# images = imgs_filtered
# masks = lesion_masks

for img, mask in zip(X_train_imgs, y_train_masks):
    # Extract random patches from this image (if more patches than max_pathes)
    X_patches = extract_patches_2d(img, patch_size, max_patches=max_patches_per_image)
    Y_patches = extract_patches_2d(mask, patch_size, max_patches=max_patches_per_image)
    
    # Label each patch: 1 if majority pixels are lesion
    y_labels = (Y_patches.mean(axis=(1,2)) > 0.5).astype(int)
    
    X_train_patches_list.append(X_patches)
    y_train_patches_list.append(y_labels)

# Combine all patches from all images
X_train_all = np.concatenate(X_train_patches_list, axis=0)
y_train_all = np.concatenate(y_train_patches_list, axis=0)

ctm = MultiClassConvolutionalTsetlinMachine2D(
    number_of_clauses=2000,
    T=200,
    s=3.9,
    patch_dim=patch_size,
    weighted_clauses=True
)

start_time = time()
ctm.fit(X_train_all, y_train_all, epochs=2000)
end_time = time()
print(f"Training completed in {end_time - start_time:.1f} seconds")
Training completed in 4876.6 seconds
In [ ]:
X_test_array = np.stack(X_test_imgs, axis=0)  # shape = (n_test, H, W)
y_test_array = np.stack(y_test_masks, axis=0)  # shape = (n_test, H, W)


patch_size = (8, 8)

pred_masks = []
pred_times = []

r = X_test_array.shape[0]

for i in range(r):
    test_img = X_test_array[i]
    
    # Extract patches
    test_patches = extract_patches_2d(test_img, patch_size)
    
    # Predict patches
    start_pred = time()
    y_pred = ctm.predict(test_patches)
    end_pred = time()
    print(f"Prediction time for image {i}: {end_pred - start_pred} seconds")
    pred_times.append(end_pred - start_pred)

    # Convert predicted labels to patches
    pred_patches = np.array([np.full(patch_size, label) for label in y_pred])
    
    # Reconstruct full image mask
    pred_mask = reconstruct_from_patches_2d(pred_patches, test_img.shape)
    pred_masks.append(pred_mask)
    
    # Commented that in here, but done this step later
    # pred_masks.append((pred_mask > 0.5).astype(np.uint8))

pred_masks = np.stack(pred_masks, axis=0)
Prediction time for image 0: 1.5906875133514404 seconds
Prediction time for image 1: 1.5800106525421143 seconds
Prediction time for image 2: 1.5306434631347656 seconds
Prediction time for image 3: 1.5246961116790771 seconds
Prediction time for image 4: 1.5180697441101074 seconds
Prediction time for image 5: 1.5476906299591064 seconds
Prediction time for image 6: 1.503272533416748 seconds
Prediction time for image 7: 1.492661952972412 seconds
Prediction time for image 8: 1.4701151847839355 seconds
Prediction time for image 9: 1.5576581954956055 seconds
Prediction time for image 10: 1.540576457977295 seconds
Prediction time for image 11: 1.5773301124572754 seconds
Prediction time for image 12: 1.5279059410095215 seconds
Prediction time for image 13: -0.9455771446228027 seconds
Prediction time for image 14: 1.5423076152801514 seconds
Prediction time for image 15: 1.5316753387451172 seconds
Prediction time for image 16: 1.4729506969451904 seconds
Prediction time for image 17: 1.5092487335205078 seconds
Prediction time for image 18: 1.6336443424224854 seconds
Prediction time for image 19: 1.5756545066833496 seconds
Prediction time for image 20: 1.5630347728729248 seconds
Prediction time for image 21: 1.5477139949798584 seconds
Prediction time for image 22: 1.5388097763061523 seconds
Prediction time for image 23: 1.539632797241211 seconds
Prediction time for image 24: 1.6155743598937988 seconds
Prediction time for image 25: 1.5494251251220703 seconds
Prediction time for image 26: 1.5106444358825684 seconds
Prediction time for image 27: 1.4759142398834229 seconds
Prediction time for image 28: 1.509150505065918 seconds
Prediction time for image 29: 1.4426944255828857 seconds
Prediction time for image 30: 1.5389995574951172 seconds
Prediction time for image 31: 1.5516891479492188 seconds
Prediction time for image 32: 1.5599570274353027 seconds
Prediction time for image 33: 1.531343936920166 seconds
Prediction time for image 34: 1.5240211486816406 seconds
Prediction time for image 35: 1.5142500400543213 seconds
Prediction time for image 36: 1.4948782920837402 seconds
Prediction time for image 37: 1.6078424453735352 seconds
Prediction time for image 38: 1.6691744327545166 seconds
Prediction time for image 39: 1.6583993434906006 seconds
Prediction time for image 40: 1.6214253902435303 seconds
Prediction time for image 41: 1.5432913303375244 seconds
Prediction time for image 42: 1.5113215446472168 seconds
Prediction time for image 43: 1.5149550437927246 seconds
Prediction time for image 44: 1.5026860237121582 seconds
Prediction time for image 45: 1.5307514667510986 seconds
Prediction time for image 46: 1.5476727485656738 seconds
Prediction time for image 47: 1.585536241531372 seconds
Prediction time for image 48: 1.5462253093719482 seconds
Prediction time for image 49: 1.5787668228149414 seconds
Prediction time for image 50: -0.865727424621582 seconds
Prediction time for image 51: 1.524533987045288 seconds
Prediction time for image 52: 1.5211572647094727 seconds
Prediction time for image 53: 1.5937213897705078 seconds
Prediction time for image 54: 1.5412392616271973 seconds
Prediction time for image 55: 1.5078485012054443 seconds
Prediction time for image 56: 1.535973310470581 seconds
Prediction time for image 57: 1.5849976539611816 seconds
Prediction time for image 58: 1.5249762535095215 seconds
Prediction time for image 59: 1.4662599563598633 seconds
Prediction time for image 60: 1.6443397998809814 seconds
Prediction time for image 61: 1.56363844871521 seconds
Prediction time for image 62: 1.446685552597046 seconds
Prediction time for image 63: 1.5666241645812988 seconds
Prediction time for image 64: 1.3319799900054932 seconds
Prediction time for image 65: 1.6049578189849854 seconds
Prediction time for image 66: 1.5580089092254639 seconds
Prediction time for image 67: 1.521324872970581 seconds
Prediction time for image 68: 1.4986646175384521 seconds
Prediction time for image 69: -0.9557466506958008 seconds
Prediction time for image 70: 1.5669217109680176 seconds
Prediction time for image 71: 1.5702033042907715 seconds
Prediction time for image 72: 1.5207650661468506 seconds
Prediction time for image 73: 1.5491504669189453 seconds
Prediction time for image 74: 1.487323522567749 seconds
Prediction time for image 75: 1.5779314041137695 seconds
Prediction time for image 76: 1.5397212505340576 seconds
Prediction time for image 77: 1.5112416744232178 seconds
Prediction time for image 78: 1.4914627075195312 seconds
Prediction time for image 79: 1.5303525924682617 seconds
Prediction time for image 80: 1.5875537395477295 seconds
Prediction time for image 81: 1.470224380493164 seconds
Prediction time for image 82: 1.5185887813568115 seconds
Prediction time for image 83: 1.5089497566223145 seconds
Prediction time for image 84: 1.5581550598144531 seconds
Prediction time for image 85: 1.5288374423980713 seconds
Prediction time for image 86: 1.4999449253082275 seconds
Prediction time for image 87: 1.5152323246002197 seconds
Prediction time for image 88: -0.9704937934875488 seconds
Prediction time for image 89: 1.5453803539276123 seconds
Prediction time for image 90: 1.4935038089752197 seconds
Prediction time for image 91: 1.4706757068634033 seconds
Prediction time for image 92: 1.5532445907592773 seconds
Prediction time for image 93: 1.56365966796875 seconds
Prediction time for image 94: 1.5325562953948975 seconds
Prediction time for image 95: 1.5638701915740967 seconds
Prediction time for image 96: 1.4797890186309814 seconds
Prediction time for image 97: 1.497138500213623 seconds
Prediction time for image 98: 1.4422483444213867 seconds
Prediction time for image 99: 1.5899405479431152 seconds
Prediction time for image 100: 1.47938871383667 seconds
Prediction time for image 101: 1.5555126667022705 seconds
Prediction time for image 102: 1.5276122093200684 seconds
Prediction time for image 103: 1.5753536224365234 seconds
Prediction time for image 104: 1.5397696495056152 seconds
Prediction time for image 105: 1.4861092567443848 seconds
Prediction time for image 106: 1.5487480163574219 seconds
Prediction time for image 107: -1.0036132335662842 seconds
Prediction time for image 108: 1.555609941482544 seconds
Prediction time for image 109: 1.603928565979004 seconds
Prediction time for image 110: 1.5490033626556396 seconds
Prediction time for image 111: 1.5036776065826416 seconds
Prediction time for image 112: 1.4680452346801758 seconds
Prediction time for image 113: 1.2962696552276611 seconds
Prediction time for image 114: 1.4723970890045166 seconds
Prediction time for image 115: 1.5952134132385254 seconds
Prediction time for image 116: 1.46396803855896 seconds
Prediction time for image 117: 1.5386075973510742 seconds
Prediction time for image 118: 1.4980340003967285 seconds
Prediction time for image 119: 1.4818403720855713 seconds
Prediction time for image 120: 1.5771212577819824 seconds
Prediction time for image 121: 1.6765296459197998 seconds
Prediction time for image 122: 1.5565142631530762 seconds
Prediction time for image 123: 1.5115408897399902 seconds
Prediction time for image 124: 1.457038164138794 seconds
Prediction time for image 125: 1.4947843551635742 seconds
Prediction time for image 126: 1.5569849014282227 seconds
Prediction time for image 127: 1.514082908630371 seconds
Prediction time for image 128: 1.5218138694763184 seconds
Prediction time for image 129: 1.528759241104126 seconds
Prediction time for image 130: 1.5364439487457275 seconds
Prediction time for image 131: 1.4933407306671143 seconds
Prediction time for image 132: 1.6352009773254395 seconds
Prediction time for image 133: 1.5933828353881836 seconds
Prediction time for image 134: 1.525589942932129 seconds
Prediction time for image 135: 1.4746346473693848 seconds
Prediction time for image 136: 1.5389983654022217 seconds
Prediction time for image 137: 1.5730974674224854 seconds
Prediction time for image 138: 1.5312755107879639 seconds
Prediction time for image 139: 1.549145221710205 seconds
Prediction time for image 140: 1.5019147396087646 seconds
Prediction time for image 141: 1.5549330711364746 seconds
Prediction time for image 142: 1.3299367427825928 seconds
Prediction time for image 143: 1.523484230041504 seconds
Prediction time for image 144: 1.5538530349731445 seconds
Prediction time for image 145: -0.8729045391082764 seconds
Prediction time for image 146: 1.4476087093353271 seconds
Prediction time for image 147: 1.5464286804199219 seconds
Prediction time for image 148: 1.5394880771636963 seconds
Prediction time for image 149: 1.422776222229004 seconds
Prediction time for image 150: 1.6020712852478027 seconds
Prediction time for image 151: 1.549144983291626 seconds
Prediction time for image 152: 1.549586534500122 seconds
Prediction time for image 153: 1.5080983638763428 seconds
Prediction time for image 154: 1.5384047031402588 seconds
Prediction time for image 155: 1.4526026248931885 seconds
Prediction time for image 156: 1.566439151763916 seconds
Prediction time for image 157: 1.3208038806915283 seconds
Prediction time for image 158: 1.5274229049682617 seconds
Prediction time for image 159: 1.5744764804840088 seconds
Prediction time for image 160: 1.5364201068878174 seconds
Prediction time for image 161: 1.502624750137329 seconds
Prediction time for image 162: 1.514739751815796 seconds
Prediction time for image 163: 1.5959692001342773 seconds
Prediction time for image 164: 1.5456345081329346 seconds
Prediction time for image 165: -0.9402482509613037 seconds
Prediction time for image 166: 1.511765718460083 seconds
Prediction time for image 167: 1.5279767513275146 seconds
Prediction time for image 168: 1.4367988109588623 seconds
Prediction time for image 169: 1.485811710357666 seconds
Prediction time for image 170: 1.5227282047271729 seconds
Prediction time for image 171: 1.5802414417266846 seconds
Prediction time for image 172: 1.5604794025421143 seconds
Prediction time for image 173: 1.5706441402435303 seconds
Prediction time for image 174: 1.498140573501587 seconds
Prediction time for image 175: 1.439302921295166 seconds
Prediction time for image 176: 1.5258584022521973 seconds
Prediction time for image 177: 1.534400463104248 seconds
Prediction time for image 178: 1.5471289157867432 seconds
Prediction time for image 179: 1.4931879043579102 seconds
Prediction time for image 180: 1.5518608093261719 seconds
Prediction time for image 181: 1.6493964195251465 seconds
Prediction time for image 182: 1.5492780208587646 seconds
Prediction time for image 183: 1.5514626502990723 seconds
Prediction time for image 184: -0.9575612545013428 seconds
Prediction time for image 185: 1.5478856563568115 seconds
Prediction time for image 186: 1.5165929794311523 seconds
In [ ]:
pred_masks_binary = (pred_masks > 0.5).astype(np.uint8)
pred_masks_binary
Out[ ]:
array([[[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       ...,

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]]], shape=(187, 256, 256), dtype=uint8)
In [291]:
X_test_imgs
Out[291]:
array([[[1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        ...,
        [0, 0, 0, ..., 1, 1, 1],
        [0, 0, 0, ..., 1, 1, 1],
        [0, 0, 0, ..., 1, 1, 1]],

       [[1, 0, 0, ..., 1, 1, 1],
        [0, 0, 0, ..., 1, 1, 1],
        [0, 0, 0, ..., 1, 1, 1],
        ...,
        [1, 1, 1, ..., 1, 1, 1],
        [1, 0, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1]],

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 1, 1, 1],
        [0, 0, 0, ..., 1, 1, 1],
        [0, 0, 0, ..., 1, 1, 1]],

       ...,

       [[0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[0, 0, 0, ..., 1, 1, 1],
        [0, 0, 0, ..., 1, 1, 1],
        [0, 0, 0, ..., 1, 1, 1],
        ...,
        [0, 0, 0, ..., 1, 0, 0],
        [0, 0, 0, ..., 1, 1, 0],
        [0, 0, 0, ..., 0, 1, 0]],

       [[1, 1, 1, ..., 0, 0, 0],
        [1, 1, 1, ..., 0, 0, 0],
        [1, 1, 1, ..., 0, 0, 0],
        ...,
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]]], shape=(187, 256, 256), dtype=uint8)
In [306]:
import matplotlib.pyplot as plt

# Suppose X_test_imgs = your test images
# y_test_masks = ground truth masks
# pred_masks = predicted masks (from CTM)

n_show = 187  # number of test images to visualize

for i in range(n_show):
    img = X_test_imgs[i]
    true_mask = y_test_masks[i]
    pred_mask = pred_masks[i]

    plt.figure(figsize=(12, 4))

    # Original image
    plt.subplot(1, 3, 1)
    plt.title("Input Image")
    plt.imshow(img, cmap='gray')
    plt.axis('off')
    plt.imshow(true_mask, cmap='Reds', alpha=0.5)
    plt.axis('off')

    # Ground truth mask
    plt.subplot(1, 3, 2)
    plt.title("Ground Truth Mask")
    plt.imshow(true_mask, cmap='gray')
    plt.axis('off')

    # Predicted mask
    plt.subplot(1, 3, 3)
    plt.title("Predicted Mask")
    plt.imshow(pred_mask, cmap='gray')
    plt.axis('off')

    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
In [233]:
for i, test_image in enumerate(X_test_imgs[90:100]):
    test_mask = y_test_masks[i]
    test_patches = extract_patches_2d(test_image, patch_size)
    y_pred = tm.predict(test_patches)

    pred_patches = np.array([np.full(patch_size, label) for label in y_pred])
    pred_mask = reconstruct_from_patches_2d(pred_patches, test_image.shape)
    binary_pred_mask = (pred_mask > 0.5).astype(np.uint8)

    # Visualize
    plt.figure(figsize=(10,3))
    plt.subplot(1,3,1)
    plt.title("Input Image")
    plt.imshow(test_image, cmap='gray')
    plt.subplot(1,3,2)
    plt.title("Ground Truth Mask")
    plt.imshow(test_mask, cmap='gray')
    plt.subplot(1,3,3)
    plt.title("Predicted Mask")
    plt.imshow(binary_pred_mask, cmap='gray')
    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image